<?php
require_once 'AbstractService.class.php';

/**
 * Description of AbstractConsultaService
 *
 * @author tiago
 */
abstract class AbstractConsultaService extends AbstractService {
    /**
     * Faz a chamada ao banco de dados.
     * @author Tiago <tiago.professor@gmail.com>
     */
    public function specificExecute() {
        $sqlResult = $this->conn->executeQuery($this->getSqlConsulta());

        $numRows = 0; //Zero
        if($sqlResult) {
            $numRows = $this->conn->getNumRows($sqlResult);
        }

        //Verificando se retornou mais de ZERO linhas
        if ($numRows > self::ZERO) {
            $this->getModel()->getResult()->setNumRowsAffected($numRows);
            //Verificando se retornou mais de UMA linha
            if($numRows > self::ONE_ROW) {
                $rows = $this->getArrayFromResult($sqlResult);
                $this->getModel()->getResult()->setResults($rows);
            } else {
                $row = $this->conn->fetchAssoc($sqlResult);
                $this->getModel()->getResult()->setResults($row);
            }
        } else {
            //Erro
            $result = $this->getModel()->getResult();
            $result->setSuccess(false);
            $result->setErrorTitle('Erro');
            $result->setErrorMsg('Ocorreu um erro ao executar a consulta, ou a consulta não retornou nenhuma linha.');
        }
    }

    /**
     * Instrução SQL para ser executada.
     * @author Tiago <tiago.professor@gmail.com>
     * @return string
     */
    public abstract function getSqlConsulta();
}

?>
